import java.util.Random;

/**
 * 二维数组  (就是一维数组的嵌套)
 * 1.定义：类型[][]  数组名=new 类型[行数][列数]
 *      int[][] a=new int[3][5];
 *      int a[][]=new int[3][5];
 *      int[] a[]=new int[3][5];
 *2.元素引用：数组名[行号][列号]
 *      行号和列号的下限为0
 */
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[][] a = new int[5][5];
        System.out.println(a);
        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
        //a[0]=new int[10];
        //System.out.println(a[0]);
        out(a);
        System.out.println("--------------------");
        setRandom(a);
        out(a);
        System.out.println("--------------------");
        int[] b=new int[a.length];
        findMin(a,b);
        out(b);
        System.out.println("--------------------");
        ZhuanZhi(a);
        out(a);
        System.out.println("--------------------");
        int[][] x=new int[10][];//为节约内存，二维数组可以不定义成行列相等
        YangHui(x);
        out(x);
    }
//杨辉三角：
    /**
     * 规则：1.每一行的第一列和最后一列的值均为1；
     *       2.当前数值=同列上一行的数值+前一列上一行的数值
     */
    static void YangHui(int[][] x) {
        for (int i = 0; i < x.length; i++) {
            x[i]=new int[i+1];//先写出数组结构：一个下三角
            x[i][0] = 1;//每一行的第一列为1
            x[i][i] = 1;//每一行的最后一列为1
        }
        for (int i=2;i<x.length;i++) {  //因为从第2行才需开始计算
            for (int j = 1; j < i; j++) {
                x[i][j] = x[i - 1][j] + x[i - 1][j - 1];//当前数值=同列上一行的数值+前一列上一行的数值
            }
        }
    }

//创建矩阵二维数组，实现行列互换(转置)
    static void ZhuanZhi(int[][] a){
        for (int i=0;i<a.length;i++){
            for (int j=0;j<i;j++){
                int t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;
            }
        }
    }



//比较二维数组每一行最小值并输出到一维数组中去：
    static void findMin(int[][] a,int[] b) {  //在a数组中调用，存入b数组中

        for (int i=0;i<a.length;i++){
            int min=a[i][0];
            for (int j=0;j<a[i].length;j++){
                if (a[i][j]<min) min=a[i][j];
            }
            b[i]=min;
        }
    }
    static void out(int[] a){
        for (int e:a){
            System.out.print(e+"   ");
        }
        System.out.println();
    }


//给数组a赋100以内的随机值：
    static void setRandom(int[][] a){
        Random r=new Random();
        for (int i=0;i<a.length;i++){
            for (int j=0;j<a[i].length;j++){
                a[i][j]=r.nextInt(100);
            }
        }

    }

//输出数组a的所有元素：
    static void out(int[][] a) {
        for (int i = 0; i < a.length; i++) { //a.length算的是行数的长度，即i<3
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();//换行显示
        }
    }

}



